package com.gtja.beoms.dto;

import com.alibaba.fastjson.JSONObject;

import java.util.List;

/*
 * @author LI
 * @description 会话对象返回值
 */
public class ConversationArchiveVo {

    //"消息id"
    private String msgId;

    //"音频id"
    private String voiceId;

    //"消息发送时间戳"
    private String time;

    //"具体为切换企业的成员的userid"
    private String user;

    //"消息动作，目前有send(发送消息/recall(撤回消息/switch(切换企业日志三种类型"
    private String action;

    //"消息发送方id。同一企业内容为userid，非相同企业为external_userid。消息如果是机器人发出，也为external_userid"
    private String from;

    //发送人姓名
    private String fromName;

    //发送人头像
    private String fromHeadUrl;

    //"消息发送方详情"
    private JSONObject fromInfo;

    //"消息接收方列表，可能是多个，同一个企业内容为userid，非相同企业为external_userid"
    private List<String> toList;

    //"消息接收方详情"
    private JSONObject toListInfo;

    //"群聊消息的群id。如果是单聊则为空"
    private String roomId;

    //"消息发送时间戳，utc时间，ms单位。"
    private String msgTime;

    //"消息类型"
    private String msgType;

    //"文本消息内容"
    private Content text;

    //"图片消息内容"
    private Content image;

    //"撤回消息"
    private Content revoke;

    //"同意会话聊天内容"
    private Content disagree;

    //"语音内容"
    private Content voice;

    //"视频内容"
    private Content video;

    //"名片"
    private Content card;

    //"位置"
    private Content location;

    //"表情"
    private Content emotion;

    //"文件"
    private Content file;

    //"链接"
    private Content link;

    //"小程序消息"
    private Content weApp;

    //"会话记录消息"
    private Content chatReCord;

    //"待办消息"
    private Content todo;

    //"投票消息"
    private Content vote;

    //"填表消息"
    private Collect collect;

    //"红包消息"
    private RedPacket redPacket;

    //"会议邀请消息"
    private Meeting meeting;

    //"在线文档消息"
    private Content doc;

    //"MarkDown格式消息/图文消息"
    private JSONObject info;

    //"混合消息"
    private JSONObject mixed;

    //"音频存档消息"
    private JSONObject meetingVoiceCall;

    //"日程消息"
    private Calendar calendar;

    private class Content {
        // 媒体资源Url
        private String mediaLinkUrl;

        //"文件路径"
        private String attachment;

        //"文本消息内容"
        private String content;

        //"图片资源的md5值"
        private String md5Sum;

        //"媒体资源的id信息"
        private String sdkFileId;

        //"文件大小"
        private Long fileSize;

        //"标识撤回的原消息的msgid"
        private String preMsgId;

        //"同意/不同意协议者的userid，外部企业默认为external_userid"
        private String userId;

        //"同意/不同意协议的时间 ms单位"
        private String agreeTime;

        //"语音消息大小"
        private Long voiceSize;

        //"播放长度"
        private Integer playLength;

        //"名片所有者所在的公司名称"
        private String corpName;

        //"经度"
        private Double longitude;

        //"纬度"
        private Double latitude;

        //"地址信息"
        private String address;

        //"标题"
        private String title;

        //"缩放比例"
        private Integer zoom;

        //"表情类型，png或者gif.1表示gif 2表示png"
        private Integer type;

        //"表情图片宽度"
        private Integer width;

        //"表情图片高度"
        private Integer height;

        //"资源的文件大小"
        private Integer imageSize;

        //"文件名称"
        private String fileName;

        //"文件类型后缀"
        private String fileExt;

        //"消息描述"
        private String description;

        //"链接url地址"
        private String linkUrl;

        //"链接图片url"
        private String imageUrl;

        //"用户名称"
        private String userName;

        //"小程序名称"
        private String displayName;

        //"消息记录内的消息内容"
        private List<Item> item;

        //"投票主题"
        private String voteTitle;

        //"投票选项，可能多个内容"
        private List<String> voteItem;

        //"投票类型.101发起投票、102参与投票"
        private Integer voteType;

        //"投票id，方便将参与投票消息与发起投票消息进行前后对照"
        private String voteId;

        //"在线文档创建者。本企业成员创建为userid；外部企业成员创建为external_userid"
        private String docCreator;

        public String getMediaLinkUrl() {
            return mediaLinkUrl;
        }

        public void setMediaLinkUrl(String mediaLinkUrl) {
            this.mediaLinkUrl = mediaLinkUrl;
        }

        public String getAttachment() {
            return attachment;
        }

        public void setAttachment(String attachment) {
            this.attachment = attachment;
        }

        public String getContent() {
            return content;
        }

        public void setContent(String content) {
            this.content = content;
        }

        public String getMd5Sum() {
            return md5Sum;
        }

        public void setMd5Sum(String md5Sum) {
            this.md5Sum = md5Sum;
        }

        public String getSdkFileId() {
            return sdkFileId;
        }

        public void setSdkFileId(String sdkFileId) {
            this.sdkFileId = sdkFileId;
        }

        public Long getFileSize() {
            return fileSize;
        }

        public void setFileSize(Long fileSize) {
            this.fileSize = fileSize;
        }

        public String getPreMsgId() {
            return preMsgId;
        }

        public void setPreMsgId(String preMsgId) {
            this.preMsgId = preMsgId;
        }

        public String getUserId() {
            return userId;
        }

        public void setUserId(String userId) {
            this.userId = userId;
        }

        public String getAgreeTime() {
            return agreeTime;
        }

        public void setAgreeTime(String agreeTime) {
            this.agreeTime = agreeTime;
        }

        public Long getVoiceSize() {
            return voiceSize;
        }

        public void setVoiceSize(Long voiceSize) {
            this.voiceSize = voiceSize;
        }

        public Integer getPlayLength() {
            return playLength;
        }

        public void setPlayLength(Integer playLength) {
            this.playLength = playLength;
        }

        public String getCorpName() {
            return corpName;
        }

        public void setCorpName(String corpName) {
            this.corpName = corpName;
        }

        public Double getLongitude() {
            return longitude;
        }

        public void setLongitude(Double longitude) {
            this.longitude = longitude;
        }

        public Double getLatitude() {
            return latitude;
        }

        public void setLatitude(Double latitude) {
            this.latitude = latitude;
        }

        public String getAddress() {
            return address;
        }

        public void setAddress(String address) {
            this.address = address;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public Integer getZoom() {
            return zoom;
        }

        public void setZoom(Integer zoom) {
            this.zoom = zoom;
        }

        public Integer getType() {
            return type;
        }

        public void setType(Integer type) {
            this.type = type;
        }

        public Integer getWidth() {
            return width;
        }

        public void setWidth(Integer width) {
            this.width = width;
        }

        public Integer getHeight() {
            return height;
        }

        public void setHeight(Integer height) {
            this.height = height;
        }

        public Integer getImageSize() {
            return imageSize;
        }

        public void setImageSize(Integer imageSize) {
            this.imageSize = imageSize;
        }

        public String getFileName() {
            return fileName;
        }

        public void setFileName(String fileName) {
            this.fileName = fileName;
        }

        public String getFileExt() {
            return fileExt;
        }

        public void setFileExt(String fileExt) {
            this.fileExt = fileExt;
        }

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getLinkUrl() {
            return linkUrl;
        }

        public void setLinkUrl(String linkUrl) {
            this.linkUrl = linkUrl;
        }

        public String getImageUrl() {
            return imageUrl;
        }

        public void setImageUrl(String imageUrl) {
            this.imageUrl = imageUrl;
        }

        public String getUserName() {
            return userName;
        }

        public void setUserName(String userName) {
            this.userName = userName;
        }

        public String getDisplayName() {
            return displayName;
        }

        public void setDisplayName(String displayName) {
            this.displayName = displayName;
        }

        public List<Item> getItem() {
            return item;
        }

        public void setItem(List<Item> item) {
            this.item = item;
        }

        public String getVoteTitle() {
            return voteTitle;
        }

        public void setVoteTitle(String voteTitle) {
            this.voteTitle = voteTitle;
        }

        public List<String> getVoteItem() {
            return voteItem;
        }

        public void setVoteItem(List<String> voteItem) {
            this.voteItem = voteItem;
        }

        public Integer getVoteType() {
            return voteType;
        }

        public void setVoteType(Integer voteType) {
            this.voteType = voteType;
        }

        public String getVoteId() {
            return voteId;
        }

        public void setVoteId(String voteId) {
            this.voteId = voteId;
        }

        public String getDocCreator() {
            return docCreator;
        }

        public void setDocCreator(String docCreator) {
            this.docCreator = docCreator;
        }
    }

    private class Item {
        //"每条聊天记录的具体消息类型：ChatRecordText/ ChatRecordFile/ ChatRecordImage/ChatRecordVideo/ ChatRecordLink/ ChatRecordLocation/ ChatRecordMixed
        private String type;

        //"消息时间，utc时间，单位秒"
        private String msgTime;

        //"消息内容。Json串，内容为对应类型的json"
        private String content;

        //"是否来自群会话"
        private Boolean fromChatRoom;

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public String getMsgTime() {
            return msgTime;
        }

        public void setMsgTime(String msgTime) {
            this.msgTime = msgTime;
        }

        public String getContent() {
            return content;
        }

        public void setContent(String content) {
            this.content = content;
        }

        public Boolean getFromChatRoom() {
            return fromChatRoom;
        }

        public void setFromChatRoom(Boolean fromChatRoom) {
            this.fromChatRoom = fromChatRoom;
        }
    }

    private class Calendar {
        //"日程主题"
        private String title;

        //"日程备注"
        private String creatorName;

        //"日程参与人"
        private List<String> attendeeName;

        //"日程开始时间"
        private String startTime;

        //"日程结束时间"
        private String endTime;

        //"日程地点"
        private String place;

        //"日程备注"
        private String remarks;

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getCreatorName() {
            return creatorName;
        }

        public void setCreatorName(String creatorName) {
            this.creatorName = creatorName;
        }

        public List<String> getAttendeeName() {
            return attendeeName;
        }

        public void setAttendeeName(List<String> attendeeName) {
            this.attendeeName = attendeeName;
        }

        public String getStartTime() {
            return startTime;
        }

        public void setStartTime(String startTime) {
            this.startTime = startTime;
        }

        public String getEndTime() {
            return endTime;
        }

        public void setEndTime(String endTime) {
            this.endTime = endTime;
        }

        public String getPlace() {
            return place;
        }

        public void setPlace(String place) {
            this.place = place;
        }

        public String getRemarks() {
            return remarks;
        }

        public void setRemarks(String remarks) {
            this.remarks = remarks;
        }
    }

    private class Collect {
        //"填表消息所在的群名称"
        private String roomName;

        //"创建者在群中的名字"
        private String creator;

        //"创建的时间"
        private String createTime;

        //"表名"
        private String title;

        //"表内容"
        private String details;

        //"表项id"
        private Long id;

        //"表项名称"
        private String ques;

        //"表项类型，有Text(文本,Number(数字,Date(日期,Time(时间"
        private String type;

        public String getRoomName() {
            return roomName;
        }

        public void setRoomName(String roomName) {
            this.roomName = roomName;
        }

        public String getCreator() {
            return creator;
        }

        public void setCreator(String creator) {
            this.creator = creator;
        }

        public String getCreateTime() {
            return createTime;
        }

        public void setCreateTime(String createTime) {
            this.createTime = createTime;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getDetails() {
            return details;
        }

        public void setDetails(String details) {
            this.details = details;
        }

        public Long getId() {
            return id;
        }

        public void setId(Long id) {
            this.id = id;
        }

        public String getQues() {
            return ques;
        }

        public void setQues(String ques) {
            this.ques = ques;
        }

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }
    }

    private class RedPacket {
        //"红包总金额 单位为分"
        private Integer totalAmount;

        //"红包总个数"
        private Integer totalCnt;

        //"红包祝福语"
        private String wish;

        //"红包消息类型。1 普通红包、2 拼手气群红包、3 激励群红包"
        private Integer type;

        public Integer getTotalAmount() {
            return totalAmount;
        }

        public void setTotalAmount(Integer totalAmount) {
            this.totalAmount = totalAmount;
        }

        public Integer getTotalCnt() {
            return totalCnt;
        }

        public void setTotalCnt(Integer totalCnt) {
            this.totalCnt = totalCnt;
        }

        public String getWish() {
            return wish;
        }

        public void setWish(String wish) {
            this.wish = wish;
        }

        public Integer getType() {
            return type;
        }

        public void setType(Integer type) {
            this.type = type;
        }
    }

    private class Meeting {
        //"会议主题"
        private String topic;

        //"红包总个数"
        private String startTime;

        //"会议结束时间"
        private String endTime;

        //"会议地址"
        private String address;

        //"会议备注"
        private String remarks;

        //"会议消息类型。101发起会议邀请消息、102处理会议邀请消息"
        private String meetingType;

        //"会议id。方便将发起、处理消息进行对照"
        private Long meetingId;

        //"会议邀请处理状态。1 参加会议、2 拒绝会议、3 待定、4 未被邀请、5 会议已取消、6 会议已过期、7 不在房间内 "只有meetingtype为102的时候此字段才有内容。"
        private Integer status;

        public String getTopic() {
            return topic;
        }

        public void setTopic(String topic) {
            this.topic = topic;
        }

        public String getStartTime() {
            return startTime;
        }

        public void setStartTime(String startTime) {
            this.startTime = startTime;
        }

        public String getEndTime() {
            return endTime;
        }

        public void setEndTime(String endTime) {
            this.endTime = endTime;
        }

        public String getAddress() {
            return address;
        }

        public void setAddress(String address) {
            this.address = address;
        }

        public String getRemarks() {
            return remarks;
        }

        public void setRemarks(String remarks) {
            this.remarks = remarks;
        }

        public String getMeetingType() {
            return meetingType;
        }

        public void setMeetingType(String meetingType) {
            this.meetingType = meetingType;
        }

        public Long getMeetingId() {
            return meetingId;
        }

        public void setMeetingId(Long meetingId) {
            this.meetingId = meetingId;
        }

        public Integer getStatus() {
            return status;
        }

        public void setStatus(Integer status) {
            this.status = status;
        }
    }

    public String getMsgId() {
        return msgId;
    }

    public void setMsgId(String msgId) {
        this.msgId = msgId;
    }

    public String getVoiceId() {
        return voiceId;
    }

    public void setVoiceId(String voiceId) {
        this.voiceId = voiceId;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public String getAction() {
        return action;
    }

    public void setAction(String action) {
        this.action = action;
    }

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }

    public JSONObject getFromInfo() {
        return fromInfo;
    }

    public void setFromInfo(JSONObject fromInfo) {
        this.fromInfo = fromInfo;
    }

    public List<String> getToList() {
        return toList;
    }

    public void setToList(List<String> toList) {
        this.toList = toList;
    }

    public JSONObject getToListInfo() {
        return toListInfo;
    }

    public void setToListInfo(JSONObject toListInfo) {
        this.toListInfo = toListInfo;
    }

    public String getRoomId() {
        return roomId;
    }

    public void setRoomId(String roomId) {
        this.roomId = roomId;
    }

    public String getMsgTime() {
        return msgTime;
    }

    public void setMsgTime(String msgTime) {
        this.msgTime = msgTime;
    }

    public String getMsgType() {
        return msgType;
    }

    public void setMsgType(String msgType) {
        this.msgType = msgType;
    }

    public Content getText() {
        return text;
    }

    public void setText(Content text) {
        this.text = text;
    }

    public Content getImage() {
        return image;
    }

    public void setImage(Content image) {
        this.image = image;
    }

    public Content getRevoke() {
        return revoke;
    }

    public void setRevoke(Content revoke) {
        this.revoke = revoke;
    }

    public Content getDisagree() {
        return disagree;
    }

    public void setDisagree(Content disagree) {
        this.disagree = disagree;
    }

    public Content getVoice() {
        return voice;
    }

    public void setVoice(Content voice) {
        this.voice = voice;
    }

    public Content getVideo() {
        return video;
    }

    public void setVideo(Content video) {
        this.video = video;
    }

    public Content getCard() {
        return card;
    }

    public void setCard(Content card) {
        this.card = card;
    }

    public Content getLocation() {
        return location;
    }

    public void setLocation(Content location) {
        this.location = location;
    }

    public Content getEmotion() {
        return emotion;
    }

    public void setEmotion(Content emotion) {
        this.emotion = emotion;
    }

    public Content getFile() {
        return file;
    }

    public void setFile(Content file) {
        this.file = file;
    }

    public Content getLink() {
        return link;
    }

    public void setLink(Content link) {
        this.link = link;
    }

    public Content getWeApp() {
        return weApp;
    }

    public void setWeApp(Content weApp) {
        this.weApp = weApp;
    }

    public Content getChatReCord() {
        return chatReCord;
    }

    public void setChatReCord(Content chatReCord) {
        this.chatReCord = chatReCord;
    }

    public Content getTodo() {
        return todo;
    }

    public void setTodo(Content todo) {
        this.todo = todo;
    }

    public Content getVote() {
        return vote;
    }

    public void setVote(Content vote) {
        this.vote = vote;
    }

    public Collect getCollect() {
        return collect;
    }

    public void setCollect(Collect collect) {
        this.collect = collect;
    }

    public RedPacket getRedPacket() {
        return redPacket;
    }

    public void setRedPacket(RedPacket redPacket) {
        this.redPacket = redPacket;
    }

    public Meeting getMeeting() {
        return meeting;
    }

    public void setMeeting(Meeting meeting) {
        this.meeting = meeting;
    }

    public Content getDoc() {
        return doc;
    }

    public void setDoc(Content doc) {
        this.doc = doc;
    }

    public JSONObject getInfo() {
        return info;
    }

    public void setInfo(JSONObject info) {
        this.info = info;
    }

    public JSONObject getMixed() {
        return mixed;
    }

    public void setMixed(JSONObject mixed) {
        this.mixed = mixed;
    }

    public JSONObject getMeetingVoiceCall() {
        return meetingVoiceCall;
    }

    public void setMeetingVoiceCall(JSONObject meetingVoiceCall) {
        this.meetingVoiceCall = meetingVoiceCall;
    }

    public Calendar getCalendar() {
        return calendar;
    }

    public void setCalendar(Calendar calendar) {
        this.calendar = calendar;
    }

    public String getFromName() {
        return fromName;
    }

    public void setFromName(String fromName) {
        this.fromName = fromName;
    }

    public String getFromHeadUrl() {
        return fromHeadUrl;
    }

    public void setFromHeadUrl(String fromHeadUrl) {
        this.fromHeadUrl = fromHeadUrl;
    }
}
